Bit block transfer (BitBLT) is an important performance enhancement technique used in digital data processing, graphics and video applications, and in particular in "windowing" applications. In general, in a bit block transfer ("block move"), an entire block of data (also known as bitmaps) is transferred from a first (source) block of storage locations in display memory to a second (destination) block of storage locations in display memory. In graphics systems BitBLTs can improve operational speed since the data transfers typically remain local to graphics controller thereby reducing the tasks required to be performed by the CPU. Similarly, entire blocks of data may be copied from a set of source locations in memory to a set of destination locations in memory by a block copy.
There are a number of known techniques for implementing bit block transfers (copies). For example, a block of source locations in memory may be identified by the addresses corresponding to a pair of "corners" of the block (or two pairs of corners if the block is a rectangle); the address of one "corner" defining a starting row and a starting column address, and the address of a second corner defining an ending row and an ending column address. Once the starting and ending addresses for the block are specified, the remaining source addresses can be derived therefrom using counters and associated circuitry. The destination block can similarly be identified. It should be noted that there are other known techniques of identifying a block of storage locations, such as defining a single starting address ("corner") and the size ("dimensions") of the block being moved or copied. To implement the actual transfer, the BitBLT circuitry and software sequence through the source addresses and each word in the identified source block is moved (or copied) from its source address and sent to a corresponding destination address. In essence, typical bit block transfer techniques read data from the source block of memory locations a word or byte at a time and then write that data into the destination block of memory a word or byte at a time. It should also be noted that some BitBLT implementations can perform more sophisticated operations which cross "byte" boundaries in a word.
In windowing display systems, bit block transfers are often used when blocks ("windows") of information are transferred from one position on the display screen to another position on the display screen, such as when a data window is dragged across the screen by a mouse, or a "window" on a screen is "processed" for some specific application. In this case, the bit block transfer circuitry and software move the corresponding pixel data in the frame buffer (display memory) from the address space corresponding to the original position on the display screen to the address space corresponding to the new position on the display screen. The bit block transfer allows pro-existing pixel data to be used to generate data on the display screen thereby eliminating the need for the system CPU to regenerate the same pixel data to define the same image on the screen. Similarly, bit block transfers can be used when blocks of information are being copied on the display screen. In this case, the corresponding pixel data is replicated by the bit block transfer circuitry and software and written into one or more additional address spaces of the frame buffer corresponding to the new areas of the display screen to which the original displayed data is being copied.
The speed of presently available bit block transferring systems is limited by the fact that such systems move or copy data from one address space to another address space in memory on a byte or word basis. Thus, the need has arisen for improved circuits, systems and methods for implementing bit block transfers. In particular, such methods, systems and circuits should be applicable to the movement and/or copying of pixel data within the frame buffer of a display system.